package com.giCompiler.business;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

import com.giCompiler.dao.CodigoFonteDao;
import com.giCompiler.dao.PacoteDao;
import com.giCompiler.bean.CodigoFonte;
import com.giCompiler.bean.Pacote;
import com.giCompiler.bean.Projeto;
import com.giCompiler.util.HibernateUtil;

public class AbrirIdeBusiness {

	public String abrirIdeBusiness(Projeto projeto){

		return montarArvorePacArq(projeto);
		
	}	
	
	public String montarArvorePacArq(Projeto projeto){
		
		List<Pacote> pacotes = new ArrayList<Pacote>();
		PacoteDao pacoteDao = new PacoteDao();
		String xmlPacCF = "";
		
		xmlPacCF += "<root>\n";
		xmlPacCF += "<node label=\""+projeto.getNome()+"\" isBranch=\"true\" type=\"projeto\" id=\"-"+projeto.getIdProjeto()+"\">\n";
		
		pacotes = pacoteDao.pegarPacoteRaiz(projeto.getIdProjeto());		
		
		Session session = HibernateUtil.getSessionFactory().openSession();
		
		System.out.println(pacotes.size());
		
		for(Pacote pacote : pacotes){
				
			xmlPacCF += pegarPacoteArvore(projeto, pacote, xmlPacCF, session);
					
		}
		
		session.close();
		
		xmlPacCF += "</node>\n";
		xmlPacCF += "</root>\n";
		
				
		System.out.println(xmlPacCF);
		return xmlPacCF;
	
	}
	
	public String pegarPacoteArvore(Projeto projeto, Pacote pacote, String xmlPacCF, Session session){
		
		List<Pacote> pacotes = new ArrayList<Pacote>();
		PacoteDao pacoteDao = new PacoteDao();
		
		pacotes = pacoteDao.pegarPacote(pacote.getIdPacote(), projeto.getIdProjeto(), session);
		
		xmlPacCF = "<node label=\""+pacote.getNome()+"\" isBranch=\"true\" type=\"pacote\" id=\""+pacote.getIdPacote()+"\">\n";

		for(Pacote p : pacotes){			
			xmlPacCF += pegarPacoteArvore(projeto, p, xmlPacCF, session);	
		}
		
		xmlPacCF = pegarCodigoFonte(projeto, pacote, xmlPacCF, session);
		
		xmlPacCF += "</node>\n";
		
		return xmlPacCF;		
		
	}
	
	public String pegarCodigoFonte(Projeto projeto, Pacote pacote, String xmlPacCF, Session session){
				
		List<CodigoFonte> cfs = new ArrayList<CodigoFonte>();
		CodigoFonteDao codigoFonteDao = new CodigoFonteDao();
		
		cfs = codigoFonteDao.pegarCodigoFontesDoPacote(pacote.getIdPacote());
		
		for(CodigoFonte cf:cfs)
			xmlPacCF += " <node label=\""+cf.getNome()+"\" type=\"classe\" id=\""+cf.getIdCodigoFonte()+"\" > </node> ";
		
		return xmlPacCF;
		
	}

}
